require(['./config'], () => {
	require(['template', 'header', 'footer'], (template,header) => {
		class Shopcar{
			constructor() {
			    this.init()
				if (this.cart) {
				    this.calcTotalMoney()
					this.calSaveMoney()
				    this.checksChange()
				    this.setAllCheck()
					this.changeNum()
				  }
				}
			
			init(){
				// 取出localStorage里存的购物车数据
				const cart = localStorage.getItem('cart')
				if (cart) {
				  // 渲染表格
				  this.cart = JSON.parse(cart)
				  $('.carTab').html(
				    template('carTabTemplate', { cart: this.cart })
				  )
				
				} else {
				  $('#shoppingcarList').hide()
				  $('.buy').hide()
				  
				  $('#cartmei').show()
				}
			}
			changeNum(){
				const _this = this
				
			   $('.less').on('click', function() {
				   
				   $(this).next()[0].value--
				   if($(this).next()[0].value < 1 ){
					   $(this).next()[0].value = 1
				   }
				   // 从localStorage取出数据, 获取到存储的数据是对象
				   // let cart = localStorage.getItem('cart')
				   // cart = JSON.parse(cart)
				   
				   
				   const id = $(this).parents('tr').data('id')
				   _this.cart = _this.cart.map(shop => {
				     if (shop.id === id) {
						 if(shop.count === 0){
							 
							 shop.count = 1
						 }else{
							 shop.count--
						 }
				   		
				     }
				     return shop
				   })
				   // // 把修改好的cart重新存localStorage
				   localStorage.setItem('cart', JSON.stringify(_this.cart))
				   // 重新计算一次总价和节省价钱
				   _this.calcTotalMoney()
				   _this.calSaveMoney()
				   
				   
				   
				  //  // 从localStorage取出数据, 获取到存储的数据是对象
				  //  let cart = localStorage.getItem('cart')
				  //  cart = JSON.parse(cart)
				   
				  //  var countNum = $(this).next()[0]
				  // countNum.value--
			 	 //  if(countNum.value < 1){
			 		//   countNum.value = 1 
			 	 //  }
				  
				  // const id = $(this).parents('tr').data('id')
				  // _this.cart = _this.cart.map(shop => {
				  //   if (shop.id === id) {
				  //     shop.count =  Number($(this).next()[0].value)
				  //   }
				  //   return shop
				  // })
				  
				  
				  // // 把修改好的cart重新存localStorage
				  // localStorage.setItem('cart', JSON.stringify(cart))
				  // // 重新计算一次总价和节省价钱
				  // _this.calcTotalMoney()
				  // _this.calSaveMoney()
				  
				  
			   })
			   
			   $('.more').on('click', function() {
				   $(this).prev()[0].value++
				   // 从localStorage取出数据, 获取到存储的数据是对象
				   // let cart = localStorage.getItem('cart')
				   // cart = JSON.parse(cart)
				   
				   const id = $(this).parents('tr').data('id')
				   _this.cart = _this.cart.map(shop => {
					   console.log(shop)
				     if (shop.id === id) {
						 shop.count++
						 console.log(shop.id)
				     }
				     return shop
				   })
				   // // 把修改好的cart重新存localStorage
				   localStorage.setItem('cart', JSON.stringify(_this.cart))
				   // 重新计算一次总价和节省价钱
				   _this.calcTotalMoney()
				   _this.calSaveMoney()
				   header.calcCartCount()
			   })
			  
			  
			  
			}
			checksChange () {
			  const _this = this
			  $('.chkbox').on('change', function () {
			    // 从父级tr身上取到自定义属性data-id   
				const id = $(this).parents('tr').data('id')
			    _this.cart = _this.cart.map(shop => {
			      if (shop.id === id) {
			        shop.check = $(this).prop('checked')
			      }
			      return shop
			    })
			    // 把修改好的cart重新存localStorage
			    localStorage.setItem('cart', JSON.stringify(_this.cart))
			    // 重新计算一次总价和节省价钱
			    _this.calcTotalMoney()
				_this.calSaveMoney()
			    // 重新设置全选
			    _this.setAllCheck()
				header.calcCartCount()
			  })
			  
			}
			setAllCheck () {
			  $('#all-check').prop('checked', this.cart.every(shop => shop.check))
			}
			calcTotalMoney () {
			  // 第一次遍历的时候：
			  //   后面初始值就是money的值为0，shop就是this.cart[0]
			  //   判断shop是否选中，是的话money就加上这条商品的小计价格，并且把money return出去
			  // 第一次的return会作为下一次的money参数继续计算，这个时候shop就是this.cart[1]
			  //    再去判断shop是否选中，如果没有选中，那就直接return上一次的money，继续参与第三次运算
			  // 当遍历结束，外面的total拿到的就是最后所有选中商品的总价了
			  const total = this.cart.reduce((money, shop) => {
			    if (shop.check) {
			      money += shop.price * shop.count
			    }
			    return money
			  }, 0)
			  $('#countNumAll').html( "￥" + total.toFixed(2))
			  
			}
			
			calSaveMoney() {
				const save = this.cart.reduce((saveMoney, shop) => {
				  if (shop.check) {
				    saveMoney += ( shop.tbOriginPrice - shop.price ) * shop.count
				  }
				  return saveMoney
				}, 0)
				$('#saveMoney').html("为您节省了 " + save.toFixed(2) + " 元")
			}
			
			
		}
		new Shopcar()
	})
})





